const fs = require('fs')
const path = require('path')
const webpack = require('webpack')

module.exports = {
  mode: 'development',  // 开发模式

  // 入口：动态地将当前目录下所有包含 app.ts 文件的子目录作为入口
  entry: fs.readdirSync(__dirname).reduce((entries, dir) => {
    const fullDir = path.join(__dirname, dir)
    const entry = path.join(fullDir, 'app.ts')
    if (fs.statSync(fullDir).isDirectory() && fs.existsSync(entry)) {
      entries[dir] = ['webpack-hot-middleware/client', entry]
    }
    return entries

  }, {}),

  // 输出：将打包后的文件输出到 __build__ 目录，文件名使用入口名称。
  output: {
    path: path.join(__dirname, '__build__'),
    filename: '[name].js',
    publicPath: '/__build__/'
  },

  //模块规则: 
  module: {
    rules: [
      {  //对 .ts 文件使用 tslint-loader 进行代码检查。
        test: /\.ts$/,
        enforce: 'pre',
        use: [
          {
            loader: 'tslint-loader'
          }
        ]
      },
      {//对 .ts 和 .tsx 文件使用 ts-loader 进行编译，开启 transpileOnly 以提高编译速度
        test: /\.tsx?$/,
        use: [
          {
            loader: 'ts-loader',
            options: {
              transpileOnly: true
            }
          }
        ]
      },
      {
        test: /\.css$/, // 匹配所有 CSS 文件
        use: [
          'style-loader', // 先使用 style-loader
          'css-loader' // 再使用 css-loader
        ]
      }
    ]
  },

  resolve: {
    extensions: ['.ts', '.tsx', '.js']
  },

  stats: 'errors-only',
  plugins: [
    new webpack.HotModuleReplacementPlugin(), //热更新
    // new webpack.NoEmitOnErrorsPlugin() //已弃用 //排除错误的插件
  ]
}
